package br.com.fiap.atividade5.business;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import br.com.fiap.atividade5.dao.PedidoDAO;
import br.com.fiap.atividade5.dao.PedidoErroDAO;
import br.com.fiap.atividade5.dao.PedidoProdutoDAO;
import br.com.fiap.atividade5.entity.Pedido;
import br.com.fiap.atividade5.entity.PedidoErro;
import br.com.fiap.atividade5.entity.PedidoProduto;

public class PedidoBusiness implements Business {
	
	private PedidoProdutoDAO pedidoProdutoDAO = new PedidoProdutoDAO();
	private PedidoDAO pedidoDAO = new PedidoDAO();
	private PedidoErroDAO pedidoErroDAO = new PedidoErroDAO();
	
	public void calculateValorTotal(Pedido pedido) throws Exception {
		
		List<PedidoProduto> pedidoProdutos = pedido.getPedidosProduto();
		
		BigDecimal valorTotal = BigDecimal.ZERO;
		
		for (PedidoProduto pp : pedidoProdutos) {
			valorTotal = valorTotal.add(pp.getTotal());
		}
		
		pedido.setValorTotal(valorTotal);
		
	}
	
	public String finalizarPedido(Pedido pedido) throws Exception {
		
		Date dataAtual = new Date();
		
		if (pedido.getData().compareTo(dataAtual) > 0) {
		
			pedidoDAO.insert(pedido);
			
			for (PedidoProduto pp : pedido.getPedidosProduto()) {
				pedidoProdutoDAO.insert(pp);
			}
			
			return "Pedido registrado com sucesso";
		} else {
			
			PedidoErro pe = new PedidoErro();
			
			pe.setCliente(pedido.getCliente());
			pe.setData(pedido.getData());
			
			String descErro = "Pedido invalido. A data deve ser posterior a data atual do sistema.";
			pe.setDescErro(descErro);
			pe.setNumeroPedido(pedido.getNumeroPedido());
			pe.setTipoCliente(pedido.getTipoCliente());
			
			pedidoErroDAO.insert(pe);
			
			return descErro;
		}
		
	}

}
